// Copyright © Tanner Gooding and Contributors. Licensed under the MIT License (MIT). See License.md in the repository root for more information.

using System;
using NUnit.Framework;

namespace TerraFX.Utilities.UnitTests
{
    /// <summary>Provides a set of tests covering the <see cref="FloatUtilities" /> static class.</summary>
    [TestFixture(Author = "Tanner Gooding", TestOf = typeof(FloatUtilities))]
    public static class FloatUtilitiesTests
    {
        /// <summary>Provides validation of the <see cref="FloatUtilities.Clamp(float, float, float)" /> static method.</summary>
        [TestCase( float.NegativeInfinity,  float.NegativeInfinity,  float.NegativeInfinity,  float.NegativeInfinity)]
        [TestCase( float.NegativeInfinity,  float.NegativeInfinity, -3.14159265f,             float.NegativeInfinity)]
        [TestCase( float.NegativeInfinity,  float.NegativeInfinity, -1.0f,                    float.NegativeInfinity)]
        [TestCase( float.NegativeInfinity,  float.NegativeInfinity, -0.0f,                    float.NegativeInfinity)]
        [TestCase( float.NegativeInfinity,  float.NegativeInfinity,  float.NaN,               float.NegativeInfinity)]
        [TestCase( float.NegativeInfinity,  float.NegativeInfinity,  0.0f,                    float.NegativeInfinity)]
        [TestCase( float.NegativeInfinity,  float.NegativeInfinity,  1.0f,                    float.NegativeInfinity)]
        [TestCase( float.NegativeInfinity,  float.NegativeInfinity,  3.14159265f,             float.NegativeInfinity)]
        [TestCase( float.NegativeInfinity,  float.NegativeInfinity,  float.PositiveInfinity,  float.NegativeInfinity)]
        [TestCase( float.NegativeInfinity, -3.14159265f,             float.NegativeInfinity, -3.14159265f)]
        [TestCase( float.NegativeInfinity, -3.14159265f,            -3.14159265f,            -3.14159265f)]
        [TestCase( float.NegativeInfinity, -3.14159265f,            -1.0f,                   -3.14159265f)]
        [TestCase( float.NegativeInfinity, -3.14159265f,            -0.0f,                   -3.14159265f)]
        [TestCase( float.NegativeInfinity, -3.14159265f,             float.NaN,              -3.14159265f)]
        [TestCase( float.NegativeInfinity, -3.14159265f,             0.0f,                   -3.14159265f)]
        [TestCase( float.NegativeInfinity, -3.14159265f,             1.0f,                   -3.14159265f)]
        [TestCase( float.NegativeInfinity, -3.14159265f,             3.14159265f,            -3.14159265f)]
        [TestCase( float.NegativeInfinity, -3.14159265f,             float.PositiveInfinity, -3.14159265f)]
        [TestCase( float.NegativeInfinity, -1.0f,                    float.NegativeInfinity, -1.0f)]
        [TestCase( float.NegativeInfinity, -1.0f,                   -3.14159265f,            -1.0f)]
        [TestCase( float.NegativeInfinity, -1.0f,                   -1.0f,                   -1.0f)]
        [TestCase( float.NegativeInfinity, -1.0f,                   -0.0f,                   -1.0f)]
        [TestCase( float.NegativeInfinity, -1.0f,                    float.NaN,              -1.0f)]
        [TestCase( float.NegativeInfinity, -1.0f,                    0.0f,                   -1.0f)]
        [TestCase( float.NegativeInfinity, -1.0f,                    1.0f,                   -1.0f)]
        [TestCase( float.NegativeInfinity, -1.0f,                    3.14159265f,            -1.0f)]
        [TestCase( float.NegativeInfinity, -1.0f,                    float.PositiveInfinity, -1.0f)]
        [TestCase( float.NegativeInfinity, -0.0f,                    float.NegativeInfinity, -0.0f)]
        [TestCase( float.NegativeInfinity, -0.0f,                   -3.14159265f,            -0.0f)]
        [TestCase( float.NegativeInfinity, -0.0f,                   -1.0f,                   -0.0f)]
        [TestCase( float.NegativeInfinity, -0.0f,                   -0.0f,                   -0.0f)]
        [TestCase( float.NegativeInfinity, -0.0f,                    float.NaN,              -0.0f)]
        [TestCase( float.NegativeInfinity, -0.0f,                    0.0f,                   -0.0f)]
        [TestCase( float.NegativeInfinity, -0.0f,                    1.0f,                   -0.0f)]
        [TestCase( float.NegativeInfinity, -0.0f,                    3.14159265f,            -0.0f)]
        [TestCase( float.NegativeInfinity, -0.0f,                    float.PositiveInfinity, -0.0f)]
        [TestCase( float.NegativeInfinity,  float.NaN,               float.NegativeInfinity,  float.NegativeInfinity)]
        [TestCase( float.NegativeInfinity,  float.NaN,              -3.14159265f,             float.NegativeInfinity)]
        [TestCase( float.NegativeInfinity,  float.NaN,              -1.0f,                    float.NegativeInfinity)]
        [TestCase( float.NegativeInfinity,  float.NaN,              -0.0f,                    float.NegativeInfinity)]
        [TestCase( float.NegativeInfinity,  float.NaN,               float.NaN,               float.NegativeInfinity)]
        [TestCase( float.NegativeInfinity,  float.NaN,               0.0f,                    float.NegativeInfinity)]
        [TestCase( float.NegativeInfinity,  float.NaN,               1.0f,                    float.NegativeInfinity)]
        [TestCase( float.NegativeInfinity,  float.NaN,               3.14159265f,             float.NegativeInfinity)]
        [TestCase( float.NegativeInfinity,  float.NaN,               float.PositiveInfinity,  float.NegativeInfinity)]
        [TestCase( float.NegativeInfinity,  0.0f,                    float.NegativeInfinity,  0.0f)]
        [TestCase( float.NegativeInfinity,  0.0f,                   -3.14159265f,             0.0f)]
        [TestCase( float.NegativeInfinity,  0.0f,                   -1.0f,                    0.0f)]
        [TestCase( float.NegativeInfinity,  0.0f,                   -0.0f,                    0.0f)]
        [TestCase( float.NegativeInfinity,  0.0f,                    float.NaN,               0.0f)]
        [TestCase( float.NegativeInfinity,  0.0f,                    0.0f,                    0.0f)]
        [TestCase( float.NegativeInfinity,  0.0f,                    1.0f,                    0.0f)]
        [TestCase( float.NegativeInfinity,  0.0f,                    3.14159265f,             0.0f)]
        [TestCase( float.NegativeInfinity,  0.0f,                    float.PositiveInfinity,  0.0f)]
        [TestCase( float.NegativeInfinity,  1.0f,                    float.NegativeInfinity,  1.0f)]
        [TestCase( float.NegativeInfinity,  1.0f,                   -3.14159265f,             1.0f)]
        [TestCase( float.NegativeInfinity,  1.0f,                   -1.0f,                    1.0f)]
        [TestCase( float.NegativeInfinity,  1.0f,                   -0.0f,                    1.0f)]
        [TestCase( float.NegativeInfinity,  1.0f,                    float.NaN,               1.0f)]
        [TestCase( float.NegativeInfinity,  1.0f,                    0.0f,                    1.0f)]
        [TestCase( float.NegativeInfinity,  1.0f,                    1.0f,                    1.0f)]
        [TestCase( float.NegativeInfinity,  1.0f,                    3.14159265f,             1.0f)]
        [TestCase( float.NegativeInfinity,  1.0f,                    float.PositiveInfinity,  1.0f)]
        [TestCase( float.NegativeInfinity,  3.14159265f,             float.NegativeInfinity,  3.14159265f)]
        [TestCase( float.NegativeInfinity,  3.14159265f,            -3.14159265f,             3.14159265f)]
        [TestCase( float.NegativeInfinity,  3.14159265f,            -1.0f,                    3.14159265f)]
        [TestCase( float.NegativeInfinity,  3.14159265f,            -0.0f,                    3.14159265f)]
        [TestCase( float.NegativeInfinity,  3.14159265f,             float.NaN,               3.14159265f)]
        [TestCase( float.NegativeInfinity,  3.14159265f,             0.0f,                    3.14159265f)]
        [TestCase( float.NegativeInfinity,  3.14159265f,             1.0f,                    3.14159265f)]
        [TestCase( float.NegativeInfinity,  3.14159265f,             3.14159265f,             3.14159265f)]
        [TestCase( float.NegativeInfinity,  3.14159265f,             float.PositiveInfinity,  3.14159265f)]
        [TestCase( float.NegativeInfinity,  float.PositiveInfinity,  float.NegativeInfinity,  float.PositiveInfinity)]
        [TestCase( float.NegativeInfinity,  float.PositiveInfinity, -3.14159265f,             float.PositiveInfinity)]
        [TestCase( float.NegativeInfinity,  float.PositiveInfinity, -1.0f,                    float.PositiveInfinity)]
        [TestCase( float.NegativeInfinity,  float.PositiveInfinity, -0.0f,                    float.PositiveInfinity)]
        [TestCase( float.NegativeInfinity,  float.PositiveInfinity,  float.NaN,               float.PositiveInfinity)]
        [TestCase( float.NegativeInfinity,  float.PositiveInfinity,  0.0f,                    float.PositiveInfinity)]
        [TestCase( float.NegativeInfinity,  float.PositiveInfinity,  1.0f,                    float.PositiveInfinity)]
        [TestCase( float.NegativeInfinity,  float.PositiveInfinity,  3.14159265f,             float.PositiveInfinity)]
        [TestCase( float.NegativeInfinity,  float.PositiveInfinity,  float.PositiveInfinity,  float.PositiveInfinity)]
        [TestCase(-3.14159265f,             float.NegativeInfinity,  float.NegativeInfinity,  float.NegativeInfinity)]
        [TestCase(-3.14159265f,             float.NegativeInfinity, -3.14159265f,            -3.14159265f)]
        [TestCase(-3.14159265f,             float.NegativeInfinity, -1.0f,                   -3.14159265f)]
        [TestCase(-3.14159265f,             float.NegativeInfinity, -0.0f,                   -3.14159265f)]
        [TestCase(-3.14159265f,             float.NegativeInfinity,  float.NaN,              -3.14159265f)]
        [TestCase(-3.14159265f,             float.NegativeInfinity,  0.0f,                   -3.14159265f)]
        [TestCase(-3.14159265f,             float.NegativeInfinity,  1.0f,                   -3.14159265f)]
        [TestCase(-3.14159265f,             float.NegativeInfinity,  3.14159265f,            -3.14159265f)]
        [TestCase(-3.14159265f,             float.NegativeInfinity,  float.PositiveInfinity, -3.14159265f)]
        [TestCase(-3.14159265f,            -3.14159265f,             float.NegativeInfinity, -3.14159265f)]
        [TestCase(-3.14159265f,            -3.14159265f,            -3.14159265f,            -3.14159265f)]
        [TestCase(-3.14159265f,            -3.14159265f,            -1.0f,                   -3.14159265f)]
        [TestCase(-3.14159265f,            -3.14159265f,            -0.0f,                   -3.14159265f)]
        [TestCase(-3.14159265f,            -3.14159265f,             float.NaN,              -3.14159265f)]
        [TestCase(-3.14159265f,            -3.14159265f,             0.0f,                   -3.14159265f)]
        [TestCase(-3.14159265f,            -3.14159265f,             1.0f,                   -3.14159265f)]
        [TestCase(-3.14159265f,            -3.14159265f,             3.14159265f,            -3.14159265f)]
        [TestCase(-3.14159265f,            -3.14159265f,             float.PositiveInfinity, -3.14159265f)]
        [TestCase(-3.14159265f,            -1.0f,                    float.NegativeInfinity, -1.0f)]
        [TestCase(-3.14159265f,            -1.0f,                   -3.14159265f,            -1.0f)]
        [TestCase(-3.14159265f,            -1.0f,                   -1.0f,                   -1.0f)]
        [TestCase(-3.14159265f,            -1.0f,                   -0.0f,                   -1.0f)]
        [TestCase(-3.14159265f,            -1.0f,                    float.NaN,              -1.0f)]
        [TestCase(-3.14159265f,            -1.0f,                    0.0f,                   -1.0f)]
        [TestCase(-3.14159265f,            -1.0f,                    1.0f,                   -1.0f)]
        [TestCase(-3.14159265f,            -1.0f,                    3.14159265f,            -1.0f)]
        [TestCase(-3.14159265f,            -1.0f,                    float.PositiveInfinity, -1.0f)]
        [TestCase(-3.14159265f,            -0.0f,                    float.NegativeInfinity, -0.0f)]
        [TestCase(-3.14159265f,            -0.0f,                   -3.14159265f,            -0.0f)]
        [TestCase(-3.14159265f,            -0.0f,                   -1.0f,                   -0.0f)]
        [TestCase(-3.14159265f,            -0.0f,                   -0.0f,                   -0.0f)]
        [TestCase(-3.14159265f,            -0.0f,                    float.NaN,              -0.0f)]
        [TestCase(-3.14159265f,            -0.0f,                    0.0f,                   -0.0f)]
        [TestCase(-3.14159265f,            -0.0f,                    1.0f,                   -0.0f)]
        [TestCase(-3.14159265f,            -0.0f,                    3.14159265f,            -0.0f)]
        [TestCase(-3.14159265f,            -0.0f,                    float.PositiveInfinity, -0.0f)]
        [TestCase(-3.14159265f,             float.NaN,               float.NegativeInfinity,  float.NegativeInfinity)]
        [TestCase(-3.14159265f,             float.NaN,              -3.14159265f,            -3.14159265f)]
        [TestCase(-3.14159265f,             float.NaN,              -1.0f,                   -3.14159265f)]
        [TestCase(-3.14159265f,             float.NaN,              -0.0f,                   -3.14159265f)]
        [TestCase(-3.14159265f,             float.NaN,               float.NaN,              -3.14159265f)]
        [TestCase(-3.14159265f,             float.NaN,               0.0f,                   -3.14159265f)]
        [TestCase(-3.14159265f,             float.NaN,               1.0f,                   -3.14159265f)]
        [TestCase(-3.14159265f,             float.NaN,               3.14159265f,            -3.14159265f)]
        [TestCase(-3.14159265f,             float.NaN,               float.PositiveInfinity, -3.14159265f)]
        [TestCase(-3.14159265f,             0.0f,                    float.NegativeInfinity,  0.0f)]
        [TestCase(-3.14159265f,             0.0f,                   -3.14159265f,             0.0f)]
        [TestCase(-3.14159265f,             0.0f,                   -1.0f,                    0.0f)]
        [TestCase(-3.14159265f,             0.0f,                   -0.0f,                    0.0f)]
        [TestCase(-3.14159265f,             0.0f,                    float.NaN,               0.0f)]
        [TestCase(-3.14159265f,             0.0f,                    0.0f,                    0.0f)]
        [TestCase(-3.14159265f,             0.0f,                    1.0f,                    0.0f)]
        [TestCase(-3.14159265f,             0.0f,                    3.14159265f,             0.0f)]
        [TestCase(-3.14159265f,             0.0f,                    float.PositiveInfinity,  0.0f)]
        [TestCase(-3.14159265f,             1.0f,                    float.NegativeInfinity,  1.0f)]
        [TestCase(-3.14159265f,             1.0f,                   -3.14159265f,             1.0f)]
        [TestCase(-3.14159265f,             1.0f,                   -1.0f,                    1.0f)]
        [TestCase(-3.14159265f,             1.0f,                   -0.0f,                    1.0f)]
        [TestCase(-3.14159265f,             1.0f,                    float.NaN,               1.0f)]
        [TestCase(-3.14159265f,             1.0f,                    0.0f,                    1.0f)]
        [TestCase(-3.14159265f,             1.0f,                    1.0f,                    1.0f)]
        [TestCase(-3.14159265f,             1.0f,                    3.14159265f,             1.0f)]
        [TestCase(-3.14159265f,             1.0f,                    float.PositiveInfinity,  1.0f)]
        [TestCase(-3.14159265f,             3.14159265f,             float.NegativeInfinity,  3.14159265f)]
        [TestCase(-3.14159265f,             3.14159265f,            -3.14159265f,             3.14159265f)]
        [TestCase(-3.14159265f,             3.14159265f,            -1.0f,                    3.14159265f)]
        [TestCase(-3.14159265f,             3.14159265f,            -0.0f,                    3.14159265f)]
        [TestCase(-3.14159265f,             3.14159265f,             float.NaN,               3.14159265f)]
        [TestCase(-3.14159265f,             3.14159265f,             0.0f,                    3.14159265f)]
        [TestCase(-3.14159265f,             3.14159265f,             1.0f,                    3.14159265f)]
        [TestCase(-3.14159265f,             3.14159265f,             3.14159265f,             3.14159265f)]
        [TestCase(-3.14159265f,             3.14159265f,             float.PositiveInfinity,  3.14159265f)]
        [TestCase(-3.14159265f,             float.PositiveInfinity,  float.NegativeInfinity,  float.PositiveInfinity)]
        [TestCase(-3.14159265f,             float.PositiveInfinity, -3.14159265f,             float.PositiveInfinity)]
        [TestCase(-3.14159265f,             float.PositiveInfinity, -1.0f,                    float.PositiveInfinity)]
        [TestCase(-3.14159265f,             float.PositiveInfinity, -0.0f,                    float.PositiveInfinity)]
        [TestCase(-3.14159265f,             float.PositiveInfinity,  float.NaN,               float.PositiveInfinity)]
        [TestCase(-3.14159265f,             float.PositiveInfinity,  0.0f,                    float.PositiveInfinity)]
        [TestCase(-3.14159265f,             float.PositiveInfinity,  1.0f,                    float.PositiveInfinity)]
        [TestCase(-3.14159265f,             float.PositiveInfinity,  3.14159265f,             float.PositiveInfinity)]
        [TestCase(-3.14159265f,             float.PositiveInfinity,  float.PositiveInfinity,  float.PositiveInfinity)]
        [TestCase(-1.0f,                    float.NegativeInfinity,  float.NegativeInfinity,  float.NegativeInfinity)]
        [TestCase(-1.0f,                    float.NegativeInfinity, -3.14159265f,            -3.14159265f)]
        [TestCase(-1.0f,                    float.NegativeInfinity, -1.0f,                   -1.0f)]
        [TestCase(-1.0f,                    float.NegativeInfinity, -0.0f,                   -1.0f)]
        [TestCase(-1.0f,                    float.NegativeInfinity,  float.NaN,              -1.0f)]
        [TestCase(-1.0f,                    float.NegativeInfinity,  0.0f,                   -1.0f)]
        [TestCase(-1.0f,                    float.NegativeInfinity,  1.0f,                   -1.0f)]
        [TestCase(-1.0f,                    float.NegativeInfinity,  3.14159265f,            -1.0f)]
        [TestCase(-1.0f,                    float.NegativeInfinity,  float.PositiveInfinity, -1.0f)]
        [TestCase(-1.0f,                   -3.14159265f,             float.NegativeInfinity, -3.14159265f)]
        [TestCase(-1.0f,                   -3.14159265f,            -3.14159265f,            -3.14159265f)]
        [TestCase(-1.0f,                   -3.14159265f,            -1.0f,                   -1.0f)]
        [TestCase(-1.0f,                   -3.14159265f,            -0.0f,                   -1.0f)]
        [TestCase(-1.0f,                   -3.14159265f,             float.NaN,              -1.0f)]
        [TestCase(-1.0f,                   -3.14159265f,             0.0f,                   -1.0f)]
        [TestCase(-1.0f,                   -3.14159265f,             1.0f,                   -1.0f)]
        [TestCase(-1.0f,                   -3.14159265f,             3.14159265f,            -1.0f)]
        [TestCase(-1.0f,                   -3.14159265f,             float.PositiveInfinity, -1.0f)]
        [TestCase(-1.0f,                   -1.0f,                    float.NegativeInfinity, -1.0f)]
        [TestCase(-1.0f,                   -1.0f,                   -3.14159265f,            -1.0f)]
        [TestCase(-1.0f,                   -1.0f,                   -1.0f,                   -1.0f)]
        [TestCase(-1.0f,                   -1.0f,                   -0.0f,                   -1.0f)]
        [TestCase(-1.0f,                   -1.0f,                    float.NaN,              -1.0f)]
        [TestCase(-1.0f,                   -1.0f,                    0.0f,                   -1.0f)]
        [TestCase(-1.0f,                   -1.0f,                    1.0f,                   -1.0f)]
        [TestCase(-1.0f,                   -1.0f,                    3.14159265f,            -1.0f)]
        [TestCase(-1.0f,                   -1.0f,                    float.PositiveInfinity, -1.0f)]
        [TestCase(-1.0f,                   -0.0f,                    float.NegativeInfinity, -0.0f)]
        [TestCase(-1.0f,                   -0.0f,                   -3.14159265f,            -0.0f)]
        [TestCase(-1.0f,                   -0.0f,                   -1.0f,                   -0.0f)]
        [TestCase(-1.0f,                   -0.0f,                   -0.0f,                   -0.0f)]
        [TestCase(-1.0f,                   -0.0f,                    float.NaN,              -0.0f)]
        [TestCase(-1.0f,                   -0.0f,                    0.0f,                   -0.0f)]
        [TestCase(-1.0f,                   -0.0f,                    1.0f,                   -0.0f)]
        [TestCase(-1.0f,                   -0.0f,                    3.14159265f,            -0.0f)]
        [TestCase(-1.0f,                   -0.0f,                    float.PositiveInfinity, -0.0f)]
        [TestCase(-1.0f,                    float.NaN,               float.NegativeInfinity,  float.NegativeInfinity)]
        [TestCase(-1.0f,                    float.NaN,              -3.14159265f,            -3.14159265f)]
        [TestCase(-1.0f,                    float.NaN,              -1.0f,                   -1.0f)]
        [TestCase(-1.0f,                    float.NaN,              -0.0f,                   -1.0f)]
        [TestCase(-1.0f,                    float.NaN,               float.NaN,              -1.0f)]
        [TestCase(-1.0f,                    float.NaN,               0.0f,                   -1.0f)]
        [TestCase(-1.0f,                    float.NaN,               1.0f,                   -1.0f)]
        [TestCase(-1.0f,                    float.NaN,               3.14159265f,            -1.0f)]
        [TestCase(-1.0f,                    float.NaN,               float.PositiveInfinity, -1.0f)]
        [TestCase(-1.0f,                    0.0f,                    float.NegativeInfinity,  0.0f)]
        [TestCase(-1.0f,                    0.0f,                   -3.14159265f,             0.0f)]
        [TestCase(-1.0f,                    0.0f,                   -1.0f,                    0.0f)]
        [TestCase(-1.0f,                    0.0f,                   -0.0f,                    0.0f)]
        [TestCase(-1.0f,                    0.0f,                    float.NaN,               0.0f)]
        [TestCase(-1.0f,                    0.0f,                    0.0f,                    0.0f)]
        [TestCase(-1.0f,                    0.0f,                    1.0f,                    0.0f)]
        [TestCase(-1.0f,                    0.0f,                    3.14159265f,             0.0f)]
        [TestCase(-1.0f,                    0.0f,                    float.PositiveInfinity,  0.0f)]
        [TestCase(-1.0f,                    1.0f,                    float.NegativeInfinity,  1.0f)]
        [TestCase(-1.0f,                    1.0f,                   -3.14159265f,             1.0f)]
        [TestCase(-1.0f,                    1.0f,                   -1.0f,                    1.0f)]
        [TestCase(-1.0f,                    1.0f,                   -0.0f,                    1.0f)]
        [TestCase(-1.0f,                    1.0f,                    float.NaN,               1.0f)]
        [TestCase(-1.0f,                    1.0f,                    0.0f,                    1.0f)]
        [TestCase(-1.0f,                    1.0f,                    1.0f,                    1.0f)]
        [TestCase(-1.0f,                    1.0f,                    3.14159265f,             1.0f)]
        [TestCase(-1.0f,                    1.0f,                    float.PositiveInfinity,  1.0f)]
        [TestCase(-1.0f,                    3.14159265f,             float.NegativeInfinity,  3.14159265f)]
        [TestCase(-1.0f,                    3.14159265f,            -3.14159265f,             3.14159265f)]
        [TestCase(-1.0f,                    3.14159265f,            -1.0f,                    3.14159265f)]
        [TestCase(-1.0f,                    3.14159265f,            -0.0f,                    3.14159265f)]
        [TestCase(-1.0f,                    3.14159265f,             float.NaN,               3.14159265f)]
        [TestCase(-1.0f,                    3.14159265f,             0.0f,                    3.14159265f)]
        [TestCase(-1.0f,                    3.14159265f,             1.0f,                    3.14159265f)]
        [TestCase(-1.0f,                    3.14159265f,             3.14159265f,             3.14159265f)]
        [TestCase(-1.0f,                    3.14159265f,             float.PositiveInfinity,  3.14159265f)]
        [TestCase(-1.0f,                    float.PositiveInfinity,  float.NegativeInfinity,  float.PositiveInfinity)]
        [TestCase(-1.0f,                    float.PositiveInfinity, -3.14159265f,             float.PositiveInfinity)]
        [TestCase(-1.0f,                    float.PositiveInfinity, -1.0f,                    float.PositiveInfinity)]
        [TestCase(-1.0f,                    float.PositiveInfinity, -0.0f,                    float.PositiveInfinity)]
        [TestCase(-1.0f,                    float.PositiveInfinity,  float.NaN,               float.PositiveInfinity)]
        [TestCase(-1.0f,                    float.PositiveInfinity,  0.0f,                    float.PositiveInfinity)]
        [TestCase(-1.0f,                    float.PositiveInfinity,  1.0f,                    float.PositiveInfinity)]
        [TestCase(-1.0f,                    float.PositiveInfinity,  3.14159265f,             float.PositiveInfinity)]
        [TestCase(-1.0f,                    float.PositiveInfinity,  float.PositiveInfinity,  float.PositiveInfinity)]
        [TestCase(-0.0f,                    float.NegativeInfinity,  float.NegativeInfinity,  float.NegativeInfinity)]
        [TestCase(-0.0f,                    float.NegativeInfinity, -3.14159265f,            -3.14159265f)]
        [TestCase(-0.0f,                    float.NegativeInfinity, -1.0f,                   -1.0f)]
        [TestCase(-0.0f,                    float.NegativeInfinity, -0.0f,                   -0.0f)]
        [TestCase(-0.0f,                    float.NegativeInfinity,  float.NaN,              -0.0f)]
        [TestCase(-0.0f,                    float.NegativeInfinity,  0.0f,                   -0.0f)]
        [TestCase(-0.0f,                    float.NegativeInfinity,  1.0f,                   -0.0f)]
        [TestCase(-0.0f,                    float.NegativeInfinity,  3.14159265f,            -0.0f)]
        [TestCase(-0.0f,                    float.NegativeInfinity,  float.PositiveInfinity, -0.0f)]
        [TestCase(-0.0f,                   -3.14159265f,             float.NegativeInfinity, -3.14159265f)]
        [TestCase(-0.0f,                   -3.14159265f,            -3.14159265f,            -3.14159265f)]
        [TestCase(-0.0f,                   -3.14159265f,            -1.0f,                   -1.0f)]
        [TestCase(-0.0f,                   -3.14159265f,            -0.0f,                   -0.0f)]
        [TestCase(-0.0f,                   -3.14159265f,             float.NaN,              -0.0f)]
        [TestCase(-0.0f,                   -3.14159265f,             0.0f,                   -0.0f)]
        [TestCase(-0.0f,                   -3.14159265f,             1.0f,                   -0.0f)]
        [TestCase(-0.0f,                   -3.14159265f,             3.14159265f,            -0.0f)]
        [TestCase(-0.0f,                   -3.14159265f,             float.PositiveInfinity, -0.0f)]
        [TestCase(-0.0f,                   -1.0f,                    float.NegativeInfinity, -1.0f)]
        [TestCase(-0.0f,                   -1.0f,                   -3.14159265f,            -1.0f)]
        [TestCase(-0.0f,                   -1.0f,                   -1.0f,                   -1.0f)]
        [TestCase(-0.0f,                   -1.0f,                   -0.0f,                   -0.0f)]
        [TestCase(-0.0f,                   -1.0f,                    float.NaN,              -0.0f)]
        [TestCase(-0.0f,                   -1.0f,                    0.0f,                   -0.0f)]
        [TestCase(-0.0f,                   -1.0f,                    1.0f,                   -0.0f)]
        [TestCase(-0.0f,                   -1.0f,                    3.14159265f,            -0.0f)]
        [TestCase(-0.0f,                   -1.0f,                    float.PositiveInfinity, -0.0f)]
        [TestCase(-0.0f,                   -0.0f,                    float.NegativeInfinity, -0.0f)]
        [TestCase(-0.0f,                   -0.0f,                   -3.14159265f,            -0.0f)]
        [TestCase(-0.0f,                   -0.0f,                   -1.0f,                   -0.0f)]
        [TestCase(-0.0f,                   -0.0f,                   -0.0f,                   -0.0f)]
        [TestCase(-0.0f,                   -0.0f,                    float.NaN,              -0.0f)]
        [TestCase(-0.0f,                   -0.0f,                    0.0f,                   -0.0f)]
        [TestCase(-0.0f,                   -0.0f,                    1.0f,                   -0.0f)]
        [TestCase(-0.0f,                   -0.0f,                    3.14159265f,            -0.0f)]
        [TestCase(-0.0f,                   -0.0f,                    float.PositiveInfinity, -0.0f)]
        [TestCase(-0.0f,                    float.NaN,               float.NegativeInfinity,  float.NegativeInfinity)]
        [TestCase(-0.0f,                    float.NaN,              -3.14159265f,            -3.14159265f)]
        [TestCase(-0.0f,                    float.NaN,              -1.0f,                   -1.0f)]
        [TestCase(-0.0f,                    float.NaN,              -0.0f,                   -0.0f)]
        [TestCase(-0.0f,                    float.NaN,               float.NaN,              -0.0f)]
        [TestCase(-0.0f,                    float.NaN,               0.0f,                   -0.0f)]
        [TestCase(-0.0f,                    float.NaN,               1.0f,                   -0.0f)]
        [TestCase(-0.0f,                    float.NaN,               3.14159265f,            -0.0f)]
        [TestCase(-0.0f,                    float.NaN,               float.PositiveInfinity, -0.0f)]
        [TestCase(-0.0f,                    0.0f,                    float.NegativeInfinity,  0.0f)]
        [TestCase(-0.0f,                    0.0f,                   -3.14159265f,             0.0f)]
        [TestCase(-0.0f,                    0.0f,                   -1.0f,                    0.0f)]
        [TestCase(-0.0f,                    0.0f,                   -0.0f,                   -0.0f)]
        [TestCase(-0.0f,                    0.0f,                    float.NaN,              -0.0f)]
        [TestCase(-0.0f,                    0.0f,                    0.0f,                   -0.0f)]
        [TestCase(-0.0f,                    0.0f,                    1.0f,                   -0.0f)]
        [TestCase(-0.0f,                    0.0f,                    3.14159265f,            -0.0f)]
        [TestCase(-0.0f,                    0.0f,                    float.PositiveInfinity, -0.0f)]
        [TestCase(-0.0f,                    1.0f,                    float.NegativeInfinity,  1.0f)]
        [TestCase(-0.0f,                    1.0f,                   -3.14159265f,             1.0f)]
        [TestCase(-0.0f,                    1.0f,                   -1.0f,                    1.0f)]
        [TestCase(-0.0f,                    1.0f,                   -0.0f,                    1.0f)]
        [TestCase(-0.0f,                    1.0f,                    float.NaN,               1.0f)]
        [TestCase(-0.0f,                    1.0f,                    0.0f,                    1.0f)]
        [TestCase(-0.0f,                    1.0f,                    1.0f,                    1.0f)]
        [TestCase(-0.0f,                    1.0f,                    3.14159265f,             1.0f)]
        [TestCase(-0.0f,                    1.0f,                    float.PositiveInfinity,  1.0f)]
        [TestCase(-0.0f,                    3.14159265f,             float.NegativeInfinity,  3.14159265f)]
        [TestCase(-0.0f,                    3.14159265f,            -3.14159265f,             3.14159265f)]
        [TestCase(-0.0f,                    3.14159265f,            -1.0f,                    3.14159265f)]
        [TestCase(-0.0f,                    3.14159265f,            -0.0f,                    3.14159265f)]
        [TestCase(-0.0f,                    3.14159265f,             float.NaN,               3.14159265f)]
        [TestCase(-0.0f,                    3.14159265f,             0.0f,                    3.14159265f)]
        [TestCase(-0.0f,                    3.14159265f,             1.0f,                    3.14159265f)]
        [TestCase(-0.0f,                    3.14159265f,             3.14159265f,             3.14159265f)]
        [TestCase(-0.0f,                    3.14159265f,             float.PositiveInfinity,  3.14159265f)]
        [TestCase(-0.0f,                    float.PositiveInfinity,  float.NegativeInfinity,  float.PositiveInfinity)]
        [TestCase(-0.0f,                    float.PositiveInfinity, -3.14159265f,             float.PositiveInfinity)]
        [TestCase(-0.0f,                    float.PositiveInfinity, -1.0f,                    float.PositiveInfinity)]
        [TestCase(-0.0f,                    float.PositiveInfinity, -0.0f,                    float.PositiveInfinity)]
        [TestCase(-0.0f,                    float.PositiveInfinity,  float.NaN,               float.PositiveInfinity)]
        [TestCase(-0.0f,                    float.PositiveInfinity,  0.0f,                    float.PositiveInfinity)]
        [TestCase(-0.0f,                    float.PositiveInfinity,  1.0f,                    float.PositiveInfinity)]
        [TestCase(-0.0f,                    float.PositiveInfinity,  3.14159265f,             float.PositiveInfinity)]
        [TestCase(-0.0f,                    float.PositiveInfinity,  float.PositiveInfinity,  float.PositiveInfinity)]
        [TestCase(float.NaN,                float.NegativeInfinity,  float.NegativeInfinity,  float.NaN)]
        [TestCase(float.NaN,                float.NegativeInfinity, -3.14159265f,             float.NaN)]
        [TestCase(float.NaN,                float.NegativeInfinity, -1.0f,                    float.NaN)]
        [TestCase(float.NaN,                float.NegativeInfinity, -0.0f,                    float.NaN)]
        [TestCase(float.NaN,                float.NegativeInfinity,  float.NaN,               float.NaN)]
        [TestCase(float.NaN,                float.NegativeInfinity,  0.0f,                    float.NaN)]
        [TestCase(float.NaN,                float.NegativeInfinity,  1.0f,                    float.NaN)]
        [TestCase(float.NaN,                float.NegativeInfinity,  3.14159265f,             float.NaN)]
        [TestCase(float.NaN,                float.NegativeInfinity,  float.PositiveInfinity,  float.NaN)]
        [TestCase(float.NaN,               -3.14159265f,             float.NegativeInfinity,  float.NaN)]
        [TestCase(float.NaN,               -3.14159265f,            -3.14159265f,             float.NaN)]
        [TestCase(float.NaN,               -3.14159265f,            -1.0f,                    float.NaN)]
        [TestCase(float.NaN,               -3.14159265f,            -0.0f,                    float.NaN)]
        [TestCase(float.NaN,               -3.14159265f,             float.NaN,               float.NaN)]
        [TestCase(float.NaN,               -3.14159265f,             0.0f,                    float.NaN)]
        [TestCase(float.NaN,               -3.14159265f,             1.0f,                    float.NaN)]
        [TestCase(float.NaN,               -3.14159265f,             3.14159265f,             float.NaN)]
        [TestCase(float.NaN,               -3.14159265f,             float.PositiveInfinity,  float.NaN)]
        [TestCase(float.NaN,               -1.0f,                    float.NegativeInfinity,  float.NaN)]
        [TestCase(float.NaN,               -1.0f,                   -3.14159265f,             float.NaN)]
        [TestCase(float.NaN,               -1.0f,                   -1.0f,                    float.NaN)]
        [TestCase(float.NaN,               -1.0f,                   -0.0f,                    float.NaN)]
        [TestCase(float.NaN,               -1.0f,                    float.NaN,               float.NaN)]
        [TestCase(float.NaN,               -1.0f,                    0.0f,                    float.NaN)]
        [TestCase(float.NaN,               -1.0f,                    1.0f,                    float.NaN)]
        [TestCase(float.NaN,               -1.0f,                    3.14159265f,             float.NaN)]
        [TestCase(float.NaN,               -1.0f,                    float.PositiveInfinity,  float.NaN)]
        [TestCase(float.NaN,               -0.0f,                    float.NegativeInfinity,  float.NaN)]
        [TestCase(float.NaN,               -0.0f,                   -3.14159265f,             float.NaN)]
        [TestCase(float.NaN,               -0.0f,                   -1.0f,                    float.NaN)]
        [TestCase(float.NaN,               -0.0f,                   -0.0f,                    float.NaN)]
        [TestCase(float.NaN,               -0.0f,                    float.NaN,               float.NaN)]
        [TestCase(float.NaN,               -0.0f,                    0.0f,                    float.NaN)]
        [TestCase(float.NaN,               -0.0f,                    1.0f,                    float.NaN)]
        [TestCase(float.NaN,               -0.0f,                    3.14159265f,             float.NaN)]
        [TestCase(float.NaN,               -0.0f,                    float.PositiveInfinity,  float.NaN)]
        [TestCase(float.NaN,                float.NaN,               float.NegativeInfinity,  float.NaN)]
        [TestCase(float.NaN,                float.NaN,              -3.14159265f,             float.NaN)]
        [TestCase(float.NaN,                float.NaN,              -1.0f,                    float.NaN)]
        [TestCase(float.NaN,                float.NaN,              -0.0f,                    float.NaN)]
        [TestCase(float.NaN,                float.NaN,               float.NaN,               float.NaN)]
        [TestCase(float.NaN,                float.NaN,               0.0f,                    float.NaN)]
        [TestCase(float.NaN,                float.NaN,               1.0f,                    float.NaN)]
        [TestCase(float.NaN,                float.NaN,               3.14159265f,             float.NaN)]
        [TestCase(float.NaN,                float.NaN,               float.PositiveInfinity,  float.NaN)]
        [TestCase(float.NaN,                0.0f,                    float.NegativeInfinity,  float.NaN)]
        [TestCase(float.NaN,                0.0f,                   -3.14159265f,             float.NaN)]
        [TestCase(float.NaN,                0.0f,                   -1.0f,                    float.NaN)]
        [TestCase(float.NaN,                0.0f,                   -0.0f,                    float.NaN)]
        [TestCase(float.NaN,                0.0f,                    float.NaN,               float.NaN)]
        [TestCase(float.NaN,                0.0f,                    0.0f,                    float.NaN)]
        [TestCase(float.NaN,                0.0f,                    1.0f,                    float.NaN)]
        [TestCase(float.NaN,                0.0f,                    3.14159265f,             float.NaN)]
        [TestCase(float.NaN,                0.0f,                    float.PositiveInfinity,  float.NaN)]
        [TestCase(float.NaN,                1.0f,                    float.NegativeInfinity,  float.NaN)]
        [TestCase(float.NaN,                1.0f,                   -3.14159265f,             float.NaN)]
        [TestCase(float.NaN,                1.0f,                   -1.0f,                    float.NaN)]
        [TestCase(float.NaN,                1.0f,                   -0.0f,                    float.NaN)]
        [TestCase(float.NaN,                1.0f,                    float.NaN,               float.NaN)]
        [TestCase(float.NaN,                1.0f,                    0.0f,                    float.NaN)]
        [TestCase(float.NaN,                1.0f,                    1.0f,                    float.NaN)]
        [TestCase(float.NaN,                1.0f,                    3.14159265f,             float.NaN)]
        [TestCase(float.NaN,                1.0f,                    float.PositiveInfinity,  float.NaN)]
        [TestCase(float.NaN,                3.14159265f,             float.NegativeInfinity,  float.NaN)]
        [TestCase(float.NaN,                3.14159265f,            -3.14159265f,             float.NaN)]
        [TestCase(float.NaN,                3.14159265f,            -1.0f,                    float.NaN)]
        [TestCase(float.NaN,                3.14159265f,            -0.0f,                    float.NaN)]
        [TestCase(float.NaN,                3.14159265f,             float.NaN,               float.NaN)]
        [TestCase(float.NaN,                3.14159265f,             0.0f,                    float.NaN)]
        [TestCase(float.NaN,                3.14159265f,             1.0f,                    float.NaN)]
        [TestCase(float.NaN,                3.14159265f,             3.14159265f,             float.NaN)]
        [TestCase(float.NaN,                3.14159265f,             float.PositiveInfinity,  float.NaN)]
        [TestCase(float.NaN,                float.PositiveInfinity,  float.NegativeInfinity,  float.NaN)]
        [TestCase(float.NaN,                float.PositiveInfinity, -3.14159265f,             float.NaN)]
        [TestCase(float.NaN,                float.PositiveInfinity, -1.0f,                    float.NaN)]
        [TestCase(float.NaN,                float.PositiveInfinity, -0.0f,                    float.NaN)]
        [TestCase(float.NaN,                float.PositiveInfinity,  float.NaN,               float.NaN)]
        [TestCase(float.NaN,                float.PositiveInfinity,  0.0f,                    float.NaN)]
        [TestCase(float.NaN,                float.PositiveInfinity,  1.0f,                    float.NaN)]
        [TestCase(float.NaN,                float.PositiveInfinity,  3.14159265f,             float.NaN)]
        [TestCase(float.NaN,                float.PositiveInfinity,  float.PositiveInfinity,  float.NaN)]
        [TestCase( 0.0f,                    float.NegativeInfinity,  float.NegativeInfinity,  float.NegativeInfinity)]
        [TestCase( 0.0f,                    float.NegativeInfinity, -3.14159265f,            -3.14159265f)]
        [TestCase( 0.0f,                    float.NegativeInfinity, -1.0f,                   -1.0f)]
        [TestCase( 0.0f,                    float.NegativeInfinity, -0.0f,                    0.0f)]
        [TestCase( 0.0f,                    float.NegativeInfinity,  float.NaN,               0.0f)]
        [TestCase( 0.0f,                    float.NegativeInfinity,  0.0f,                    0.0f)]
        [TestCase( 0.0f,                    float.NegativeInfinity,  1.0f,                    0.0f)]
        [TestCase( 0.0f,                    float.NegativeInfinity,  3.14159265f,             0.0f)]
        [TestCase( 0.0f,                    float.NegativeInfinity,  float.PositiveInfinity,  0.0f)]
        [TestCase( 0.0f,                   -3.14159265f,             float.NegativeInfinity, -3.14159265f)]
        [TestCase( 0.0f,                   -3.14159265f,            -3.14159265f,            -3.14159265f)]
        [TestCase( 0.0f,                   -3.14159265f,            -1.0f,                   -1.0f)]
        [TestCase( 0.0f,                   -3.14159265f,            -0.0f,                    0.0f)]
        [TestCase( 0.0f,                   -3.14159265f,             float.NaN,               0.0f)]
        [TestCase( 0.0f,                   -3.14159265f,             0.0f,                    0.0f)]
        [TestCase( 0.0f,                   -3.14159265f,             1.0f,                    0.0f)]
        [TestCase( 0.0f,                   -3.14159265f,             3.14159265f,             0.0f)]
        [TestCase( 0.0f,                   -3.14159265f,             float.PositiveInfinity,  0.0f)]
        [TestCase( 0.0f,                   -1.0f,                    float.NegativeInfinity, -1.0f)]
        [TestCase( 0.0f,                   -1.0f,                   -3.14159265f,            -1.0f)]
        [TestCase( 0.0f,                   -1.0f,                   -1.0f,                   -1.0f)]
        [TestCase( 0.0f,                   -1.0f,                   -0.0f,                    0.0f)]
        [TestCase( 0.0f,                   -1.0f,                    float.NaN,               0.0f)]
        [TestCase( 0.0f,                   -1.0f,                    0.0f,                    0.0f)]
        [TestCase( 0.0f,                   -1.0f,                    1.0f,                    0.0f)]
        [TestCase( 0.0f,                   -1.0f,                    3.14159265f,             0.0f)]
        [TestCase( 0.0f,                   -1.0f,                    float.PositiveInfinity,  0.0f)]
        [TestCase( 0.0f,                   -0.0f,                    float.NegativeInfinity, -0.0f)]
        [TestCase( 0.0f,                   -0.0f,                   -3.14159265f,            -0.0f)]
        [TestCase( 0.0f,                   -0.0f,                   -1.0f,                   -0.0f)]
        [TestCase( 0.0f,                   -0.0f,                   -0.0f,                    0.0f)]
        [TestCase( 0.0f,                   -0.0f,                    float.NaN,               0.0f)]
        [TestCase( 0.0f,                   -0.0f,                    0.0f,                    0.0f)]
        [TestCase( 0.0f,                   -0.0f,                    1.0f,                    0.0f)]
        [TestCase( 0.0f,                   -0.0f,                    3.14159265f,             0.0f)]
        [TestCase( 0.0f,                   -0.0f,                    float.PositiveInfinity,  0.0f)]
        [TestCase( 0.0f,                    float.NaN,               float.NegativeInfinity,  float.NegativeInfinity)]
        [TestCase( 0.0f,                    float.NaN,              -3.14159265f,            -3.14159265f)]
        [TestCase( 0.0f,                    float.NaN,              -1.0f,                   -1.0f)]
        [TestCase( 0.0f,                    float.NaN,              -0.0f,                    0.0f)]
        [TestCase( 0.0f,                    float.NaN,               float.NaN,               0.0f)]
        [TestCase( 0.0f,                    float.NaN,               0.0f,                    0.0f)]
        [TestCase( 0.0f,                    float.NaN,               1.0f,                    0.0f)]
        [TestCase( 0.0f,                    float.NaN,               3.14159265f,             0.0f)]
        [TestCase( 0.0f,                    float.NaN,               float.PositiveInfinity,  0.0f)]
        [TestCase( 0.0f,                    0.0f,                    float.NegativeInfinity,  0.0f)]
        [TestCase( 0.0f,                    0.0f,                   -3.14159265f,             0.0f)]
        [TestCase( 0.0f,                    0.0f,                   -1.0f,                    0.0f)]
        [TestCase( 0.0f,                    0.0f,                   -0.0f,                    0.0f)]
        [TestCase( 0.0f,                    0.0f,                    float.NaN,               0.0f)]
        [TestCase( 0.0f,                    0.0f,                    0.0f,                    0.0f)]
        [TestCase( 0.0f,                    0.0f,                    1.0f,                    0.0f)]
        [TestCase( 0.0f,                    0.0f,                    3.14159265f,             0.0f)]
        [TestCase( 0.0f,                    0.0f,                    float.PositiveInfinity,  0.0f)]
        [TestCase( 0.0f,                    1.0f,                    float.NegativeInfinity,  1.0f)]
        [TestCase( 0.0f,                    1.0f,                   -3.14159265f,             1.0f)]
        [TestCase( 0.0f,                    1.0f,                   -1.0f,                    1.0f)]
        [TestCase( 0.0f,                    1.0f,                   -0.0f,                    1.0f)]
        [TestCase( 0.0f,                    1.0f,                    float.NaN,               1.0f)]
        [TestCase( 0.0f,                    1.0f,                    0.0f,                    1.0f)]
        [TestCase( 0.0f,                    1.0f,                    1.0f,                    1.0f)]
        [TestCase( 0.0f,                    1.0f,                    3.14159265f,             1.0f)]
        [TestCase( 0.0f,                    1.0f,                    float.PositiveInfinity,  1.0f)]
        [TestCase( 0.0f,                    3.14159265f,             float.NegativeInfinity,  3.14159265f)]
        [TestCase( 0.0f,                    3.14159265f,            -3.14159265f,             3.14159265f)]
        [TestCase( 0.0f,                    3.14159265f,            -1.0f,                    3.14159265f)]
        [TestCase( 0.0f,                    3.14159265f,            -0.0f,                    3.14159265f)]
        [TestCase( 0.0f,                    3.14159265f,             float.NaN,               3.14159265f)]
        [TestCase( 0.0f,                    3.14159265f,             0.0f,                    3.14159265f)]
        [TestCase( 0.0f,                    3.14159265f,             1.0f,                    3.14159265f)]
        [TestCase( 0.0f,                    3.14159265f,             3.14159265f,             3.14159265f)]
        [TestCase( 0.0f,                    3.14159265f,             float.PositiveInfinity,  3.14159265f)]
        [TestCase( 0.0f,                    float.PositiveInfinity,  float.NegativeInfinity,  float.PositiveInfinity)]
        [TestCase( 0.0f,                    float.PositiveInfinity, -3.14159265f,             float.PositiveInfinity)]
        [TestCase( 0.0f,                    float.PositiveInfinity, -1.0f,                    float.PositiveInfinity)]
        [TestCase( 0.0f,                    float.PositiveInfinity, -0.0f,                    float.PositiveInfinity)]
        [TestCase( 0.0f,                    float.PositiveInfinity,  float.NaN,               float.PositiveInfinity)]
        [TestCase( 0.0f,                    float.PositiveInfinity,  0.0f,                    float.PositiveInfinity)]
        [TestCase( 0.0f,                    float.PositiveInfinity,  1.0f,                    float.PositiveInfinity)]
        [TestCase( 0.0f,                    float.PositiveInfinity,  3.14159265f,             float.PositiveInfinity)]
        [TestCase( 0.0f,                    float.PositiveInfinity,  float.PositiveInfinity,  float.PositiveInfinity)]
        [TestCase( 1.0f,                    float.NegativeInfinity,  float.NegativeInfinity,  float.NegativeInfinity)]
        [TestCase( 1.0f,                    float.NegativeInfinity, -3.14159265f,            -3.14159265f)]
        [TestCase( 1.0f,                    float.NegativeInfinity, -1.0f,                   -1.0f)]
        [TestCase( 1.0f,                    float.NegativeInfinity, -0.0f,                   -0.0f)]
        [TestCase( 1.0f,                    float.NegativeInfinity,  float.NaN,               1.0f)]
        [TestCase( 1.0f,                    float.NegativeInfinity,  0.0f,                    0.0f)]
        [TestCase( 1.0f,                    float.NegativeInfinity,  1.0f,                    1.0f)]
        [TestCase( 1.0f,                    float.NegativeInfinity,  3.14159265f,             1.0f)]
        [TestCase( 1.0f,                    float.NegativeInfinity,  float.PositiveInfinity,  1.0f)]
        [TestCase( 1.0f,                   -3.14159265f,             float.NegativeInfinity, -3.14159265f)]
        [TestCase( 1.0f,                   -3.14159265f,            -3.14159265f,            -3.14159265f)]
        [TestCase( 1.0f,                   -3.14159265f,            -1.0f,                   -1.0f)]
        [TestCase( 1.0f,                   -3.14159265f,            -0.0f,                   -0.0f)]
        [TestCase( 1.0f,                   -3.14159265f,             float.NaN,               1.0f)]
        [TestCase( 1.0f,                   -3.14159265f,             0.0f,                    0.0f)]
        [TestCase( 1.0f,                   -3.14159265f,             1.0f,                    1.0f)]
        [TestCase( 1.0f,                   -3.14159265f,             3.14159265f,             1.0f)]
        [TestCase( 1.0f,                   -3.14159265f,             float.PositiveInfinity,  1.0f)]
        [TestCase( 1.0f,                   -1.0f,                    float.NegativeInfinity, -1.0f)]
        [TestCase( 1.0f,                   -1.0f,                   -3.14159265f,            -1.0f)]
        [TestCase( 1.0f,                   -1.0f,                   -1.0f,                   -1.0f)]
        [TestCase( 1.0f,                   -1.0f,                   -0.0f,                   -0.0f)]
        [TestCase( 1.0f,                   -1.0f,                    float.NaN,               1.0f)]
        [TestCase( 1.0f,                   -1.0f,                    0.0f,                    0.0f)]
        [TestCase( 1.0f,                   -1.0f,                    1.0f,                    1.0f)]
        [TestCase( 1.0f,                   -1.0f,                    3.14159265f,             1.0f)]
        [TestCase( 1.0f,                   -1.0f,                    float.PositiveInfinity,  1.0f)]
        [TestCase( 1.0f,                   -0.0f,                    float.NegativeInfinity, -0.0f)]
        [TestCase( 1.0f,                   -0.0f,                   -3.14159265f,            -0.0f)]
        [TestCase( 1.0f,                   -0.0f,                   -1.0f,                   -0.0f)]
        [TestCase( 1.0f,                   -0.0f,                   -0.0f,                   -0.0f)]
        [TestCase( 1.0f,                   -0.0f,                    float.NaN,               1.0f)]
        [TestCase( 1.0f,                   -0.0f,                    0.0f,                    0.0f)]
        [TestCase( 1.0f,                   -0.0f,                    1.0f,                    1.0f)]
        [TestCase( 1.0f,                   -0.0f,                    3.14159265f,             1.0f)]
        [TestCase( 1.0f,                   -0.0f,                    float.PositiveInfinity,  1.0f)]
        [TestCase( 1.0f,                    float.NaN,               float.NegativeInfinity,  float.NegativeInfinity)]
        [TestCase( 1.0f,                    float.NaN,              -3.14159265f,            -3.14159265f)]
        [TestCase( 1.0f,                    float.NaN,              -1.0f,                   -1.0f)]
        [TestCase( 1.0f,                    float.NaN,              -0.0f,                   -0.0f)]
        [TestCase( 1.0f,                    float.NaN,               float.NaN,               1.0f)]
        [TestCase( 1.0f,                    float.NaN,               0.0f,                    0.0f)]
        [TestCase( 1.0f,                    float.NaN,               1.0f,                    1.0f)]
        [TestCase( 1.0f,                    float.NaN,               3.14159265f,             1.0f)]
        [TestCase( 1.0f,                    float.NaN,               float.PositiveInfinity,  1.0f)]
        [TestCase( 1.0f,                    0.0f,                    float.NegativeInfinity,  0.0f)]
        [TestCase( 1.0f,                    0.0f,                   -3.14159265f,             0.0f)]
        [TestCase( 1.0f,                    0.0f,                   -1.0f,                    0.0f)]
        [TestCase( 1.0f,                    0.0f,                   -0.0f,                   -0.0f)]
        [TestCase( 1.0f,                    0.0f,                    float.NaN,               1.0f)]
        [TestCase( 1.0f,                    0.0f,                    0.0f,                    0.0f)]
        [TestCase( 1.0f,                    0.0f,                    1.0f,                    1.0f)]
        [TestCase( 1.0f,                    0.0f,                    3.14159265f,             1.0f)]
        [TestCase( 1.0f,                    0.0f,                    float.PositiveInfinity,  1.0f)]
        [TestCase( 1.0f,                    1.0f,                    float.NegativeInfinity,  1.0f)]
        [TestCase( 1.0f,                    1.0f,                   -3.14159265f,             1.0f)]
        [TestCase( 1.0f,                    1.0f,                   -1.0f,                    1.0f)]
        [TestCase( 1.0f,                    1.0f,                   -0.0f,                    1.0f)]
        [TestCase( 1.0f,                    1.0f,                    float.NaN,               1.0f)]
        [TestCase( 1.0f,                    1.0f,                    0.0f,                    1.0f)]
        [TestCase( 1.0f,                    1.0f,                    1.0f,                    1.0f)]
        [TestCase( 1.0f,                    1.0f,                    3.14159265f,             1.0f)]
        [TestCase( 1.0f,                    1.0f,                    float.PositiveInfinity,  1.0f)]
        [TestCase( 1.0f,                    3.14159265f,             float.NegativeInfinity,  3.14159265f)]
        [TestCase( 1.0f,                    3.14159265f,            -3.14159265f,             3.14159265f)]
        [TestCase( 1.0f,                    3.14159265f,            -1.0f,                    3.14159265f)]
        [TestCase( 1.0f,                    3.14159265f,            -0.0f,                    3.14159265f)]
        [TestCase( 1.0f,                    3.14159265f,             float.NaN,               3.14159265f)]
        [TestCase( 1.0f,                    3.14159265f,             0.0f,                    3.14159265f)]
        [TestCase( 1.0f,                    3.14159265f,             1.0f,                    3.14159265f)]
        [TestCase( 1.0f,                    3.14159265f,             3.14159265f,             3.14159265f)]
        [TestCase( 1.0f,                    3.14159265f,             float.PositiveInfinity,  3.14159265f)]
        [TestCase( 1.0f,                    float.PositiveInfinity,  float.NegativeInfinity,  float.PositiveInfinity)]
        [TestCase( 1.0f,                    float.PositiveInfinity, -3.14159265f,             float.PositiveInfinity)]
        [TestCase( 1.0f,                    float.PositiveInfinity, -1.0f,                    float.PositiveInfinity)]
        [TestCase( 1.0f,                    float.PositiveInfinity, -0.0f,                    float.PositiveInfinity)]
        [TestCase( 1.0f,                    float.PositiveInfinity,  float.NaN,               float.PositiveInfinity)]
        [TestCase( 1.0f,                    float.PositiveInfinity,  0.0f,                    float.PositiveInfinity)]
        [TestCase( 1.0f,                    float.PositiveInfinity,  1.0f,                    float.PositiveInfinity)]
        [TestCase( 1.0f,                    float.PositiveInfinity,  3.14159265f,             float.PositiveInfinity)]
        [TestCase( 1.0f,                    float.PositiveInfinity,  float.PositiveInfinity,  float.PositiveInfinity)]
        [TestCase( 3.14159265f,             float.NegativeInfinity,  float.NegativeInfinity,  float.NegativeInfinity)]
        [TestCase( 3.14159265f,             float.NegativeInfinity, -3.14159265f,            -3.14159265f)]
        [TestCase( 3.14159265f,             float.NegativeInfinity, -1.0f,                   -1.0f)]
        [TestCase( 3.14159265f,             float.NegativeInfinity, -0.0f,                   -0.0f)]
        [TestCase( 3.14159265f,             float.NegativeInfinity,  float.NaN,               3.14159265f)]
        [TestCase( 3.14159265f,             float.NegativeInfinity,  0.0f,                    0.0f)]
        [TestCase( 3.14159265f,             float.NegativeInfinity,  1.0f,                    1.0f)]
        [TestCase( 3.14159265f,             float.NegativeInfinity,  3.14159265f,             3.14159265f)]
        [TestCase( 3.14159265f,             float.NegativeInfinity,  float.PositiveInfinity,  3.14159265f)]
        [TestCase( 3.14159265f,            -3.14159265f,             float.NegativeInfinity, -3.14159265f)]
        [TestCase( 3.14159265f,            -3.14159265f,            -3.14159265f,            -3.14159265f)]
        [TestCase( 3.14159265f,            -3.14159265f,            -1.0f,                   -1.0f)]
        [TestCase( 3.14159265f,            -3.14159265f,            -0.0f,                   -0.0f)]
        [TestCase( 3.14159265f,            -3.14159265f,             float.NaN,               3.14159265f)]
        [TestCase( 3.14159265f,            -3.14159265f,             0.0f,                    0.0f)]
        [TestCase( 3.14159265f,            -3.14159265f,             1.0f,                    1.0f)]
        [TestCase( 3.14159265f,            -3.14159265f,             3.14159265f,             3.14159265f)]
        [TestCase( 3.14159265f,            -3.14159265f,             float.PositiveInfinity,  3.14159265f)]
        [TestCase( 3.14159265f,            -1.0f,                    float.NegativeInfinity, -1.0f)]
        [TestCase( 3.14159265f,            -1.0f,                   -3.14159265f,            -1.0f)]
        [TestCase( 3.14159265f,            -1.0f,                   -1.0f,                   -1.0f)]
        [TestCase( 3.14159265f,            -1.0f,                   -0.0f,                   -0.0f)]
        [TestCase( 3.14159265f,            -1.0f,                    float.NaN,               3.14159265f)]
        [TestCase( 3.14159265f,            -1.0f,                    0.0f,                    0.0f)]
        [TestCase( 3.14159265f,            -1.0f,                    1.0f,                    1.0f)]
        [TestCase( 3.14159265f,            -1.0f,                    3.14159265f,             3.14159265f)]
        [TestCase( 3.14159265f,            -1.0f,                    float.PositiveInfinity,  3.14159265f)]
        [TestCase( 3.14159265f,            -0.0f,                    float.NegativeInfinity, -0.0f)]
        [TestCase( 3.14159265f,            -0.0f,                   -3.14159265f,            -0.0f)]
        [TestCase( 3.14159265f,            -0.0f,                   -1.0f,                   -0.0f)]
        [TestCase( 3.14159265f,            -0.0f,                   -0.0f,                   -0.0f)]
        [TestCase( 3.14159265f,            -0.0f,                    float.NaN,               3.14159265f)]
        [TestCase( 3.14159265f,            -0.0f,                    0.0f,                    0.0f)]
        [TestCase( 3.14159265f,            -0.0f,                    1.0f,                    1.0f)]
        [TestCase( 3.14159265f,            -0.0f,                    3.14159265f,             3.14159265f)]
        [TestCase( 3.14159265f,            -0.0f,                    float.PositiveInfinity,  3.14159265f)]
        [TestCase( 3.14159265f,             float.NaN,               float.NegativeInfinity,  float.NegativeInfinity)]
        [TestCase( 3.14159265f,             float.NaN,              -3.14159265f,            -3.14159265f)]
        [TestCase( 3.14159265f,             float.NaN,              -1.0f,                   -1.0f)]
        [TestCase( 3.14159265f,             float.NaN,              -0.0f,                   -0.0f)]
        [TestCase( 3.14159265f,             float.NaN,               float.NaN,               3.14159265f)]
        [TestCase( 3.14159265f,             float.NaN,               0.0f,                    0.0f)]
        [TestCase( 3.14159265f,             float.NaN,               1.0f,                    1.0f)]
        [TestCase( 3.14159265f,             float.NaN,               3.14159265f,             3.14159265f)]
        [TestCase( 3.14159265f,             float.NaN,               float.PositiveInfinity,  3.14159265f)]
        [TestCase( 3.14159265f,             0.0f,                    float.NegativeInfinity,  0.0f)]
        [TestCase( 3.14159265f,             0.0f,                   -3.14159265f,             0.0f)]
        [TestCase( 3.14159265f,             0.0f,                   -1.0f,                    0.0f)]
        [TestCase( 3.14159265f,             0.0f,                   -0.0f,                   -0.0f)]
        [TestCase( 3.14159265f,             0.0f,                    float.NaN,               3.14159265f)]
        [TestCase( 3.14159265f,             0.0f,                    0.0f,                    0.0f)]
        [TestCase( 3.14159265f,             0.0f,                    1.0f,                    1.0f)]
        [TestCase( 3.14159265f,             0.0f,                    3.14159265f,             3.14159265f)]
        [TestCase( 3.14159265f,             0.0f,                    float.PositiveInfinity,  3.14159265f)]
        [TestCase( 3.14159265f,             1.0f,                    float.NegativeInfinity,  1.0f)]
        [TestCase( 3.14159265f,             1.0f,                   -3.14159265f,             1.0f)]
        [TestCase( 3.14159265f,             1.0f,                   -1.0f,                    1.0f)]
        [TestCase( 3.14159265f,             1.0f,                   -0.0f,                    1.0f)]
        [TestCase( 3.14159265f,             1.0f,                    float.NaN,               3.14159265f)]
        [TestCase( 3.14159265f,             1.0f,                    0.0f,                    1.0f)]
        [TestCase( 3.14159265f,             1.0f,                    1.0f,                    1.0f)]
        [TestCase( 3.14159265f,             1.0f,                    3.14159265f,             3.14159265f)]
        [TestCase( 3.14159265f,             1.0f,                    float.PositiveInfinity,  3.14159265f)]
        [TestCase( 3.14159265f,             3.14159265f,             float.NegativeInfinity,  3.14159265f)]
        [TestCase( 3.14159265f,             3.14159265f,            -3.14159265f,             3.14159265f)]
        [TestCase( 3.14159265f,             3.14159265f,            -1.0f,                    3.14159265f)]
        [TestCase( 3.14159265f,             3.14159265f,            -0.0f,                    3.14159265f)]
        [TestCase( 3.14159265f,             3.14159265f,             float.NaN,               3.14159265f)]
        [TestCase( 3.14159265f,             3.14159265f,             0.0f,                    3.14159265f)]
        [TestCase( 3.14159265f,             3.14159265f,             1.0f,                    3.14159265f)]
        [TestCase( 3.14159265f,             3.14159265f,             3.14159265f,             3.14159265f)]
        [TestCase( 3.14159265f,             3.14159265f,             float.PositiveInfinity,  3.14159265f)]
        [TestCase( 3.14159265f,             float.PositiveInfinity,  float.NegativeInfinity,  float.PositiveInfinity)]
        [TestCase( 3.14159265f,             float.PositiveInfinity, -3.14159265f,             float.PositiveInfinity)]
        [TestCase( 3.14159265f,             float.PositiveInfinity, -1.0f,                    float.PositiveInfinity)]
        [TestCase( 3.14159265f,             float.PositiveInfinity, -0.0f,                    float.PositiveInfinity)]
        [TestCase( 3.14159265f,             float.PositiveInfinity,  float.NaN,               float.PositiveInfinity)]
        [TestCase( 3.14159265f,             float.PositiveInfinity,  0.0f,                    float.PositiveInfinity)]
        [TestCase( 3.14159265f,             float.PositiveInfinity,  1.0f,                    float.PositiveInfinity)]
        [TestCase( 3.14159265f,             float.PositiveInfinity,  3.14159265f,             float.PositiveInfinity)]
        [TestCase( 3.14159265f,             float.PositiveInfinity,  float.PositiveInfinity,  float.PositiveInfinity)]
        [TestCase( float.PositiveInfinity,  float.NegativeInfinity,  float.NegativeInfinity,  float.NegativeInfinity)]
        [TestCase( float.PositiveInfinity,  float.NegativeInfinity, -3.14159265f,            -3.14159265f)]
        [TestCase( float.PositiveInfinity,  float.NegativeInfinity, -1.0f,                   -1.0f)]
        [TestCase( float.PositiveInfinity,  float.NegativeInfinity, -0.0f,                   -0.0f)]
        [TestCase( float.PositiveInfinity,  float.NegativeInfinity,  float.NaN,               float.PositiveInfinity)]
        [TestCase( float.PositiveInfinity,  float.NegativeInfinity,  0.0f,                    0.0f)]
        [TestCase( float.PositiveInfinity,  float.NegativeInfinity,  1.0f,                    1.0f)]
        [TestCase( float.PositiveInfinity,  float.NegativeInfinity,  3.14159265f,             3.14159265f)]
        [TestCase( float.PositiveInfinity,  float.NegativeInfinity,  float.PositiveInfinity,  float.PositiveInfinity)]
        [TestCase( float.PositiveInfinity, -3.14159265f,             float.NegativeInfinity, -3.14159265f)]
        [TestCase( float.PositiveInfinity, -3.14159265f,            -3.14159265f,            -3.14159265f)]
        [TestCase( float.PositiveInfinity, -3.14159265f,            -1.0f,                   -1.0f)]
        [TestCase( float.PositiveInfinity, -3.14159265f,            -0.0f,                   -0.0f)]
        [TestCase( float.PositiveInfinity, -3.14159265f,             float.NaN,               float.PositiveInfinity)]
        [TestCase( float.PositiveInfinity, -3.14159265f,             0.0f,                    0.0f)]
        [TestCase( float.PositiveInfinity, -3.14159265f,             1.0f,                    1.0f)]
        [TestCase( float.PositiveInfinity, -3.14159265f,             3.14159265f,             3.14159265f)]
        [TestCase( float.PositiveInfinity, -3.14159265f,             float.PositiveInfinity,  float.PositiveInfinity)]
        [TestCase( float.PositiveInfinity, -1.0f,                    float.NegativeInfinity, -1.0f)]
        [TestCase( float.PositiveInfinity, -1.0f,                   -3.14159265f,            -1.0f)]
        [TestCase( float.PositiveInfinity, -1.0f,                   -1.0f,                   -1.0f)]
        [TestCase( float.PositiveInfinity, -1.0f,                   -0.0f,                   -0.0f)]
        [TestCase( float.PositiveInfinity, -1.0f,                    float.NaN,               float.PositiveInfinity)]
        [TestCase( float.PositiveInfinity, -1.0f,                    0.0f,                    0.0f)]
        [TestCase( float.PositiveInfinity, -1.0f,                    1.0f,                    1.0f)]
        [TestCase( float.PositiveInfinity, -1.0f,                    3.14159265f,             3.14159265f)]
        [TestCase( float.PositiveInfinity, -1.0f,                    float.PositiveInfinity,  float.PositiveInfinity)]
        [TestCase( float.PositiveInfinity, -0.0f,                    float.NegativeInfinity, -0.0f)]
        [TestCase( float.PositiveInfinity, -0.0f,                   -3.14159265f,            -0.0f)]
        [TestCase( float.PositiveInfinity, -0.0f,                   -1.0f,                   -0.0f)]
        [TestCase( float.PositiveInfinity, -0.0f,                   -0.0f,                   -0.0f)]
        [TestCase( float.PositiveInfinity, -0.0f,                    float.NaN,               float.PositiveInfinity)]
        [TestCase( float.PositiveInfinity, -0.0f,                    0.0f,                    0.0f)]
        [TestCase( float.PositiveInfinity, -0.0f,                    1.0f,                    1.0f)]
        [TestCase( float.PositiveInfinity, -0.0f,                    3.14159265f,             3.14159265f)]
        [TestCase( float.PositiveInfinity, -0.0f,                    float.PositiveInfinity,  float.PositiveInfinity)]
        [TestCase( float.PositiveInfinity,  float.NaN,               float.NegativeInfinity,  float.NegativeInfinity)]
        [TestCase( float.PositiveInfinity,  float.NaN,              -3.14159265f,            -3.14159265f)]
        [TestCase( float.PositiveInfinity,  float.NaN,              -1.0f,                   -1.0f)]
        [TestCase( float.PositiveInfinity,  float.NaN,              -0.0f,                   -0.0f)]
        [TestCase( float.PositiveInfinity,  float.NaN,               float.NaN,               float.PositiveInfinity)]
        [TestCase( float.PositiveInfinity,  float.NaN,               0.0f,                    0.0f)]
        [TestCase( float.PositiveInfinity,  float.NaN,               1.0f,                    1.0f)]
        [TestCase( float.PositiveInfinity,  float.NaN,               3.14159265f,             3.14159265f)]
        [TestCase( float.PositiveInfinity,  float.NaN,               float.PositiveInfinity,  float.PositiveInfinity)]
        [TestCase( float.PositiveInfinity,  0.0f,                    float.NegativeInfinity,  0.0f)]
        [TestCase( float.PositiveInfinity,  0.0f,                   -3.14159265f,             0.0f)]
        [TestCase( float.PositiveInfinity,  0.0f,                   -1.0f,                    0.0f)]
        [TestCase( float.PositiveInfinity,  0.0f,                   -0.0f,                   -0.0f)]
        [TestCase( float.PositiveInfinity,  0.0f,                    float.NaN,               float.PositiveInfinity)]
        [TestCase( float.PositiveInfinity,  0.0f,                    0.0f,                    0.0f)]
        [TestCase( float.PositiveInfinity,  0.0f,                    1.0f,                    1.0f)]
        [TestCase( float.PositiveInfinity,  0.0f,                    3.14159265f,             3.14159265f)]
        [TestCase( float.PositiveInfinity,  0.0f,                    float.PositiveInfinity,  float.PositiveInfinity)]
        [TestCase( float.PositiveInfinity,  1.0f,                    float.NegativeInfinity,  1.0f)]
        [TestCase( float.PositiveInfinity,  1.0f,                   -3.14159265f,             1.0f)]
        [TestCase( float.PositiveInfinity,  1.0f,                   -1.0f,                    1.0f)]
        [TestCase( float.PositiveInfinity,  1.0f,                   -0.0f,                    1.0f)]
        [TestCase( float.PositiveInfinity,  1.0f,                    float.NaN,               float.PositiveInfinity)]
        [TestCase( float.PositiveInfinity,  1.0f,                    0.0f,                    1.0f)]
        [TestCase( float.PositiveInfinity,  1.0f,                    1.0f,                    1.0f)]
        [TestCase( float.PositiveInfinity,  1.0f,                    3.14159265f,             3.14159265f)]
        [TestCase( float.PositiveInfinity,  1.0f,                    float.PositiveInfinity,  float.PositiveInfinity)]
        [TestCase( float.PositiveInfinity,  3.14159265f,             float.NegativeInfinity,  3.14159265f)]
        [TestCase( float.PositiveInfinity,  3.14159265f,            -3.14159265f,             3.14159265f)]
        [TestCase( float.PositiveInfinity,  3.14159265f,            -1.0f,                    3.14159265f)]
        [TestCase( float.PositiveInfinity,  3.14159265f,            -0.0f,                    3.14159265f)]
        [TestCase( float.PositiveInfinity,  3.14159265f,             float.NaN,               float.PositiveInfinity)]
        [TestCase( float.PositiveInfinity,  3.14159265f,             0.0f,                    3.14159265f)]
        [TestCase( float.PositiveInfinity,  3.14159265f,             1.0f,                    3.14159265f)]
        [TestCase( float.PositiveInfinity,  3.14159265f,             3.14159265f,             3.14159265f)]
        [TestCase( float.PositiveInfinity,  3.14159265f,             float.PositiveInfinity,  float.PositiveInfinity)]
        [TestCase( float.PositiveInfinity,  float.PositiveInfinity,  float.NegativeInfinity,  float.PositiveInfinity)]
        [TestCase( float.PositiveInfinity,  float.PositiveInfinity, -3.14159265f,             float.PositiveInfinity)]
        [TestCase( float.PositiveInfinity,  float.PositiveInfinity, -1.0f,                    float.PositiveInfinity)]
        [TestCase( float.PositiveInfinity,  float.PositiveInfinity, -0.0f,                    float.PositiveInfinity)]
        [TestCase( float.PositiveInfinity,  float.PositiveInfinity,  float.NaN,               float.PositiveInfinity)]
        [TestCase( float.PositiveInfinity,  float.PositiveInfinity,  0.0f,                    float.PositiveInfinity)]
        [TestCase( float.PositiveInfinity,  float.PositiveInfinity,  1.0f,                    float.PositiveInfinity)]
        [TestCase( float.PositiveInfinity,  float.PositiveInfinity,  3.14159265f,             float.PositiveInfinity)]
        [TestCase( float.PositiveInfinity,  float.PositiveInfinity,  float.PositiveInfinity,  float.PositiveInfinity)]
        public static void ClampSingleSingleSingleTest(float value, float min, float max, float expectedResult)
        {
            var result = FloatUtilities.Clamp(value, min, max);
            var resultBits = BitConverter.SingleToInt32Bits(result);
            var expectedResultBits = BitConverter.SingleToInt32Bits(expectedResult);

            Assert.That(resultBits,
                Is.EqualTo(expectedResultBits)
            );
        }
    }
}
